recognizing design patterns